package com.rmb.api.service;


import com.rmb.mart.entity.api.*;
import com.rmb.mart.qurey.QueryPage;
import com.rmb.mart.entity.api.MartApiError;
import com.rmb.mart.entity.api.MartApiCharge;
import com.rmb.mart.entity.api.MartApiEssential;
import com.rmb.mart.entity.api.MartApiRule;

import java.util.List;
import java.util.Map;

/**
 * (MartApiEssential)表服务接口
 *
 * @author makejava
 * @since 2021-01-20 09:37:34
 */
public interface MartApiEssentialService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    MartApiEssential queryById(Long id);

    /**
     * 查询接口数据+模糊查询+分页
     *
     * @param martApiEssential 模糊对象
     * @return 对象列表
     */
    List<Map<String,Object>> queryAllByLimit(MartApiEssential martApiEssential);

    /**
     * 新增Api数据
     *
     * @param martApiEssential 实例对象
     * @return 实例对象
     */
    int addApiEssential(MartApiEssential martApiEssential);

    /**
     * 修改Api数据
     *
     * @param martApiEssential 实例对象
     * @return 受影响行数
     */
    int updateApiEssential(MartApiEssential martApiEssential);

    /**
     * 查询指定api接口
     * @param apiId 接口ID
     * @return 指定接口
     */
    List<Map<String,Object>> selectApiRecord(Long apiId);

    /**
     * 查询接口规则
     * @return 规则集合
     * @param queryPage
     */
    List<MartApiRule> selectAllRule(QueryPage queryPage);

    /**
     * 指定接口规则
     * @param apiRuleId 接口规则ID
     * @return 指定规则信息
     */
    MartApiRule selectApiRuleById(Long apiRuleId);

    /**
     * 编辑Api接口规则数据
     * @param martApiRule 实例对象
     * @return 受影响行数
     */
    int updateApiRule(MartApiRule martApiRule);

    /**
     * 更改Api规则状态
     * @param apiRuleId 接口规则ID
     * @param status 规则状态
     * @return 受影响行数
     */
    int updateApiRuleStatus(Integer apiRuleId, Integer status);

    /**
     * 查询接口计费方式
     * @param martApiCharge 实例对象
     * @return 集合
     */
    List<Map<String,Object>> selectAllCharge(MartApiCharge martApiCharge);

    /**
     * 根据指定ID删除Api
     * @param apiId 接口ID
     * @return 操作结果
     */
    int removeApiEssentialById(Long apiId);

    /**
     * 更改Api状态
     * @param apiId 接口ID
     * @param status 接口状态
     * @return 受影响行数
     */
    int updateApiStatus(Integer apiId, Integer status);

    /**
     * 根据指定规则ID删除Api规则
     * @param apiRuleId 接口ID
     * @return 操作结果
     */
    int removeApiRuleById(Long apiRuleId);

    /**
     * 查询数据统计量
     * 1.当天数据
     * 2.数据总量
     * 3.近15日每天数据量
     * @param id apiID
     * @return
     */
    List<Map<String, Object>> selectStatistics(Long id);

    /**
     * 编辑接口计费方式
     * @param martApiCharge 实例对象
     * @return 编辑结果
     */
    int updateApiCharge(MartApiCharge martApiCharge);


    /**
     * 查询指定Api计费
     * @param id Api计费ID
     * @return 计费数据
     */
    MartApiCharge selectApiChargeById(Long id);

    /**
     * 查询Api类型
     * @param queryPage 分页对象
     * @return 查询结果
     */
    List<Map<String,Object>> selectAllApiType(QueryPage queryPage);

    /**
     * 修改Api类型
     * @param martApiType 实例对象
     * @return 操作结果
     */
    int updateApiType(MartApiType martApiType);


    /**
     * 根据Api类型查询指定数据
     * @param apiTypeId Api类型ID
     * @return 查询类型数据
     */
    MartApiType selectApiTypeById(Long apiTypeId);

    /**
     * 接口使用量查询
     * @param martApiRecord 实例对象
     * @return 查询结果
     */
    List<Map<String,Object>> selectUsageAmount(MartApiRecord martApiRecord);

    /**
     * 查询错误码参照
     * @return
     */
    List<MartApiError> selectErrorQuery();

    /**
     * 查询企业下所有接口
     * @param id
     * @return
     */
    List<MartApiEssential> findByCompanyId(Long id);
}